加载所需要的包
library(dplyr)
library(memisc)
library(ggplot2)
载入数据源
red <- read.csv('wineQualityReds.csv')
str(red)
## 'data.frame': 1599 obs. of 13 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ fixed.acidity : num 7.4 7.8 7.8 11.2 7.4 7.4 7.9 7.3 7.8 7.5 ...
## $ volatile.acidity : num 0.7 0.88 0.76 0.28 0.7 0.66 0.6 0.65 0.58 0.5 ...
## $ citric.acid : num 0 0 0.04 0.56 0 0 0.06 0 0.02 0.36 ...
## $ residual.sugar : num 1.9 2.6 2.3 1.9 1.9 1.8 1.6 1.2 2 6.1 ...
## $ chlorides : num 0.076 0.098 0.092 0.075 0.076 0.075 0.069 0.065 0.073 0.071 ...
## $ free.sulfur.dioxide : num 11 25 15 17 11 13 15 15 9 17 ...
## $ total.sulfur.dioxide: num 34 67 54 60 34 40 59 21 18 102 ...
## $ density : num 0.998 0.997 0.997 0.998 0.998 ...
## $ pH : num 3.51 3.2 3.26 3.16 3.51 3.51 3.3 3.39 3.36 3.35 ...
## $ sulphates : num 0.56 0.68 0.65 0.58 0.56 0.56 0.46 0.47 0.57 0.8 ...
## $ alcohol : num 9.4 9.8 9.8 9.8 9.4 9.4 9.4 10 9.5 10.5 ...
## $ quality : int 5 5 5 6 5 5 5 7 7 5 ...
dim(red)
## [1] 1599 13
固定酸度来查看数据分布情况为正态分布,数值集中在6.5到9这个区间,其中数量最多的值在固定酸度7.2。
挥发酸度来查看数据分布情况为正态分布,数值集中在0.25到0.8这个区间。
柠檬酸来查看数据分布情况为正态分布,数值集中在0.1到0.5这个区间。
残糖来查看数据分布情况为长尾分布。
固定酸度来查看数据分布情况为长尾分布,分布集中在0.05到0.1这个区间。
游离二氧化硫来查看数据分布情况为正偏态分布,峰值位于6左右。
二氧化硫总来查看数据分布情况为正偏态分布,数值集中在6到56这个区间,其中峰值在15左右。
密度来查看数据分布情况为正态分布,数值集中在0.995到0.998这个区间。
ph值来查看数据分布情况为正态分布,数值集中在3.15到3.45这个区间。
固定酸度来查看数据分布情况为正偏态分布,数值集中在0.4到0.9这个区间,其中峰值在0.55左右。
酒精来查看数据分布情况为长尾形分布,数值集中在9到11这个区间,其中峰值在9.5左右。
品质来查看数据分布情况为正态分布,数值集中在5、6这三个数字之间
这个红酒的数据包含1599种红酒,以及13个相关参数,有12个参数(固定酸度、挥发酸度、柠檬酸、残糖、氯化物、游离二氧化硫、二氧化硫总量、密度、pH、硫酸盐、酒精、品质)对红酒品质评级的影响。
兴趣的主要特性主要是红酒的挥发酸度、固定酸度、柠檬酸、残糖、硫酸盐、酒精和红酒的品质之间的关系。 ### 你认为数据集内哪些其他特征可以帮助你探索兴趣特点? 残糖和pH值这两个值对红酒的口感有很大的影响,这两个会对我有很大的帮助。 ### 根据数据集内已有变量,你是否创建了任何新变量? 没有 ### 在已经探究的特性中,是否存在任何异常分布?你是否对数据进行一些操作,如清洁、调整或改变数据的形式?如果是,你为什么会这样做? 存在异常分布,没有对数据进行操作,只是通过调整x轴的范围、步长以及极限值来调整图形的样式。
发现红酒的品质与固定酸没有太大关系,样本多集中在品质5分到6分的区间,且固定性酸数值集中在6-10的区间。
ggplot(aes(x=factor(quality),y= volatile.acidity),data = red)+
geom_jitter(alpha=0.1) +
geom_boxplot(alpha=0.8)
品质越高的红酒,挥发酸度越低。
ggplot(aes(x= factor(quality),y=citric.acid),data = red) +
geom_jitter(alpha=0.1) +
geom_boxplot(alpha=0.8)
随着品质的提高,柠檬酸中位数逐渐上升。然而有一个异常值,柠檬酸为1时,其品质为4。
ggplot(aes(x=factor(quality),y=residual.sugar),data = red) +
geom_jitter(alpha=0.1)+
geom_boxplot(alpha=0.8)
在品质5~6之间的红酒,残糖集中在4以下,整体来说,残糖与品质关系不大。
ggplot(aes(x=factor(quality),y=sulphates),data = red) +
geom_jitter(alpha=0.1) +
geom_boxplot(alpha=0.8)
品质越高的红酒在硫酸盐含量会有略微升高。
ggplot(aes(x=pH,y=fixed.acidity,color= factor(quality)),data = red) +
geom_point(alpha=0.5,size=1,position = 'jitter') +
geom_smooth(method = 'lm',se = FALSE,size=1)+
scale_color_brewer(palette = 'Reds')
pH和固定酸度,呈负相关。
ggplot(aes(x=factor(quality),y=alcohol),data = red) +
geom_jitter(alpha=0.1) +
geom_boxplot(alpha=0.8)
随着品质的提高,酒精含量逐渐提高。但在4-5时并没有这种现象,推测酒精度数只能影响高品质的酒。
固定性酸跟品质之间关系不大。挥发酸度跟品质有一定的相关性,呈负相关。柠檬酸跟品质呈正相关,随着柠檬酸的增加品质升高,但是柠檬酸存在一个极大值为1,该值下的品质并不高。残糖同样与品质没有太大关系。硫酸盐和品质呈正相关,但在大于1.25后相关度就不高了。酒精跟品质也是呈现正相关,且相关度在所有其他变量跟品质中最高。
酒精和密度的相关性很高,呈负相关。不过这符合我们的物理认知,我认为这是正常的。
柠檬酸和固定酸度,呈正相关,其在所有观察变量对中相关度最高。
高品质的红酒硫酸盐含量集中在0.7~0.8左右,挥发酸度在0.25~0.8左右的范围。
ggplot(aes(x=volatile.acidity,y=alcohol,color= factor(quality)),data = red) +
geom_point(alpha=0.5,position = 'jitter')+
geom_smooth(method = 'lm',se = FALSE,size=1)+
scale_color_brewer(palette = 'Reds')
酒精度数上升,品质提高,对于低分段的随着挥发酸度升高,品质下降。
ggplot(aes(x=citric.acid,y=alcohol,color=factor(quality)),data = red) +
geom_point(alpha=0.5,size=1,position = 'jitter')+
geom_smooth(method = 'lm',se = FALSE)
对于中间品质段同样影响不大,对于高品质和低品质段影响较大。高分若要保持分数需随柠檬酸增加降低酒精度,而低分段若要提高分数,需提升柠檬酸和酒精含量。
ggplot(aes(x=citric.acid,y=sulphates,color=factor(quality)),data = red) +
geom_point(alpha=0.5,size=1,position = 'jitter')+
geom_smooth(method = 'lm',se = FALSE)+
scale_color_brewer(palette = 'Reds')
评价随着柠檬酸增加降低,随着硫酸盐增加而提高.
ggplot(aes(x= sulphates,y=alcohol,color=factor(quality)),data = red) +
geom_point(alpha=0.5,size=1,position = 'jitter') +
geom_smooth(method = 'lm',se = FALSE)+
scale_color_brewer(palette = 'Reds')
硫酸盐对品质的影响不大,酒精对品质对影响很大。
ggplot(aes(x=volatile.acidity,y=citric.acid,color=factor(quality)),data = red) +
geom_point(alpha=0.5,size=1,position = 'jitter')+
geom_smooth(method = 'lm',se = FALSE)+
scale_color_brewer(palette = 'Reds')
挥发酸跟柠檬酸有密切的关联性,呈反比。
training_data <- sample_frac(red, .6)
test_data <- red[ !red$X %in% training_data$X, ]
m1 <- lm(as.numeric(quality) ~ alcohol, data = training_data)
m2 <- update(m1, ~ . + sulphates)
m3 <- update(m2, ~ . + volatile.acidity)
m4 <- update(m3, ~ . + citric.acid)
m5 <- update(m4, ~ . + fixed.acidity)
mtable(m1,m2,m3,m4,m5)
##
## Calls:
## m1: lm(formula = as.numeric(quality) ~ alcohol, data = training_data)
## m2: lm(formula = as.numeric(quality) ~ alcohol + sulphates, data = training_data)
## m3: lm(formula = as.numeric(quality) ~ alcohol + sulphates + volatile.acidity,
## data = training_data)
## m4: lm(formula = as.numeric(quality) ~ alcohol + sulphates + volatile.acidity +
## citric.acid, data = training_data)
## m5: lm(formula = as.numeric(quality) ~ alcohol + sulphates + volatile.acidity +
## citric.acid + fixed.acidity, data = training_data)
##
## =======================================================================================
## m1 m2 m3 m4 m5
## ---------------------------------------------------------------------------------------
## (Intercept) 1.961*** 1.508*** 2.837*** 2.854*** 2.516***
## (0.227) (0.231) (0.256) (0.262) (0.291)
## alcohol 0.352*** 0.338*** 0.296*** 0.296*** 0.304***
## (0.022) (0.021) (0.021) (0.021) (0.021)
## sulphates 0.910*** 0.604*** 0.614*** 0.624***
## (0.132) (0.129) (0.132) (0.132)
## volatile.acidity -1.300*** -1.324*** -1.397***
## (0.129) (0.149) (0.151)
## citric.acid -0.043 -0.357*
## (0.133) (0.179)
## fixed.acidity 0.045**
## (0.017)
## ---------------------------------------------------------------------------------------
## R-squared 0.215 0.253 0.325 0.325 0.329
## adj. R-squared 0.214 0.251 0.322 0.322 0.326
## sigma 0.707 0.690 0.656 0.657 0.655
## F 262.272 161.486 152.924 114.611 93.644
## p 0.000 0.000 0.000 0.000 0.000
## Log-likelihood -1026.981 -1003.559 -955.008 -954.957 -951.484
## Deviance 478.085 455.293 411.451 411.406 408.438
## AIC 2059.962 2015.117 1920.017 1921.913 1916.968
## BIC 2074.559 2034.581 1944.346 1951.108 1951.029
## N 959 959 959 959 959
## =======================================================================================
在完成这些分析后,我将使用与葡萄酒品质密切相关的变量并使用它们生成线性模型。
red_predict <- data.frame(red$quality,predict(m5, red) - as.numeric(red$quality))
names(red_predict) <- c("quality", "error")
ggplot(data=red_predict, aes(x=factor(quality),y=error)) +
geom_jitter(alpha = 0.3) +
geom_boxplot(alpha = 0.5)
酒精含量高与硫酸盐含量高,这些一般是高品质红酒的特征。
没有挥发酸度和固定酸度都特别高的红酒。
我创建了个线性模型,由于R-squared较低,我发现酒精对红酒品质的影响只占22%。这可能是由于数据集主要包含一般品质的葡萄酒,以及据集中好和差品质葡萄酒的数据很少。模型清楚地表明,由于缺乏信息,它不是预测高品质和低品质葡萄酒的最佳模型。
这个图告诉我们,酒精含量在决定葡萄酒的品质上扮演了一个重要的角色。酒精的百分比越高,酒的品质就越好。
在这个图中,我们看到品质好的葡萄酒,它们的酒精和硫酸盐浓度都比较高,这意味着高酒精含量和高硫酸盐浓度似乎产生更好的葡萄酒。
我们发现,一般品质的红酒的误差比高品质和低品质葡萄酒更密集。这一点从我们数据集包含一般品质的葡萄酒并且在极端范围内没有太多数据的中看出。
在这些数据中,我的主要在分析不同品质葡萄酒受到哪些因素的影响,尤其是高品质和低品质的葡萄酒。由于数据集的一般品质的葡萄酒非常集中,因此我的没有足够的数据来精确构建能够预测葡萄酒品质的模型,而其他因素的误差幅度较小。
在最初分析红酒数据集之前,我发现有些葡萄酒根本没有柠檬酸,但后来我对葡萄酒进行了进一步的研究。我看到柠檬酸实际上被添加到一些葡萄酒中,以增加酸度。所以很明显,一些葡萄酒根本就没有柠檬酸。
首先,我根据品质绘制了不同的变量以查看它们之间的单变量关系,看它们是否对分类变量有任何影响。我看到影响葡萄酒品质的因素最多的是酒精,硫酸盐和酸浓度。
在我的分析的最后部分,我绘制了多变量图形,看看是否有一些有趣的变量组合,共同影响葡萄酒的整体品质。。
于以后的分析分析工作中,我可以尝试创建几种模型,来解决红酒品质的问题。